home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
FredFish PD 314.adf
/
Zc
/
zcsrc.lzh
/
IOLib
/
stdio
/
fread.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-06-15
|
780b
|
50 lines
#include <stdio.h>
int
fread(buf, size, number, fi)
char *buf;
int size;
int number;
register FILE *fi;
{
register long r, rr, m, n;
r = (fi->_flag &= ~_IORW);
if(!(r & _IOREAD) || (r & (_IOERR | _IOEOF)))
return(EOF);
if(fi->_base == NULL) /* allocate a buffer if there wasn't one */
_getbuf(fi);
rr = 0;
n = size * number;
for (;;) {
r = fi->_cnt;
if (r > n)
r = n;
if (r) {
(void)lmemcpy( buf, fi->_ptr, r );
buf += r;
n -= r;
rr += r;
fi->_cnt -= r;
}
if (n) {
m = read(fi->_file, fi->_base, fi->_bsiz);
if(m <= 0){
fi->_flag |= ((m == 0) ? _IOEOF : _IOERR);
if ( m < 0 )
return EOF;
}
fi->_cnt = m;
fi->_ptr = fi->_base;
if ( m > 0 )
continue;
}
break;
}
return (rr / size );
}